# 读取给定文本文件，统计单词，计算TOP 10
# 有一个文件sample.txt，对其进行单词统计，不区分大小写，并显示单词重复最多的10个单词。
from pathlib import Path
from collections import OrderedDict

class dict_fu():
    def __init__(self):
        # 定义空字典
        self.dict_obj = OrderedDict()
        # 初始值为None
        self.dict_sort = None

    #统计单词
    def counts_word(self,arr: list):
        for words in arr:
            words = words.lower()
            self.dict_obj[words] = self.dict_obj.get(words,0) + 1
    #排序
    def sortdict(self):
        self.dict_sort = sorted(self.dict_obj.items() , key=lambda x:x[1] ,reverse=True)
    #统计前10
    def Top10_obj(self):
        self.sortdict()
        return self.dict_sort[:10]

files = Path('sample.txt')
dict_words = dict_fu()
with files.open(encoding="utf-8",newline="") as f:
    arr = [",", ".", "(", ")", "-", "/", ".."]
    for x in f:
        x = x.strip()
        for y in arr:
            x = x.replace(y," ")
        dict_words.counts_word(x.split())
print(dict_words.Top10_obj())

#复制目录
# 选择一个已存在的目录作为当前工作目录，在其下创建a/b/c/d这样的子目录结构并在这些子目录的不同层级生成50个普通文件，要求文件名由随机4个小写字母构成。
# 将a目录下所有内容复制到当前工作目录dst目录下去，要求复制的普通文件的文件名必须是x、y、z开头。
# 举例，假设工作目录是/tmp，构建的目录结构是/tmp/a/b/c/d。在a、b、c、d目录中放入随机生成的文件，
# 这些文件的名称也是随机生成的。最终把a目录下所有的目录也就是b、c、d目录，和文件名开头是x、y、z开头的文件。
import random
from pathlib import Path
import string
import shutil

# 当前目录
basedir = Path('D:/PycharmProjects/untitled')
# 子目录
sub_dir = Path('a/b/c/d')
dirs = [sub_dir] + list(sub_dir.parents)[:-1] #列表返回的每一个元素，代表每一个路径
print(dirs)

# 创建所有目录
(basedir/sub_dir).mkdir(parents=True, exist_ok=True)
#生成随机文件名
filenames = ("".join(random.choices(string.ascii_lowercase, k=4)) for i in range(50))

#批量创建文件
for f in filenames:
    (basedir/random.choice(dirs)/f).touch()
#定义x,y,z名称开头
heads = set('xyz')

# 文件排外
def ignore_file(src,files): #src当前目录是谁？files当前目录文件名
    return {name for name in files if name[0] not in heads and Path(src,name).is_file()}
shutil.copytree(str(basedir/'a'), str(basedir/'dst'),ignore=ignore_file) #拷 贝过程，指定ignore_file函数排外的文件不要


# 配置文件格式转换
# 有一个配置文件test.ini内容如下，将其转换成json格式文件

import  configparser # 配置解释器
import json

section_dist = {}
section_list= [] #由于cfg.sections返回的是列表，因此这里定义空列表以写入

cfg = configparser.ConfigParser()
cfg.read("D:/PycharmProjects/untitled/test.ini")

if len(cfg.items('DEFAULT')) != 0:
    section_list.append('DEFAULT')
section_list += cfg.sections()

for secs_name in section_list:
    section_dist[secs_name] = cfg.items(secs_name)

x = json.dumps(section_dist,indent=4) #编码json格式,indent缩进4格
# print(type(x) , x)

with open('D:/PycharmProjects/untitled/test2.ini','w') as f:
    f.write(x)